import request from '@/utils/request.js';
import { API } from '@/utils/status';

// 用taskType区分嵌入与提取，具体见API.stegnaography.type

// 获取任务列表
/*
pageNo 页数
pageSize 页个数
moduleType 课题数
taskType 0嵌入 1提取
*/
export function getList(data){
  return request({
    method: 'post',
    url: '/algo/executeAlgoList',
    data
  });
}

// 创建任务 - 要用API.steganography.moduleType来区分模块，再使用taskType来区分嵌入与提取
export function create(data){
  return request({
    method: 'post',
    url: '/algo/addExecuteAlgo',
    data
  });
}

// 删除任务
export function del(params){
  return request({
    method: 'get',
    url: '/algo/deleteExecuteAlgo',
    params
  });
}

// 修改任务
export function set(data){
  return request({
    method: 'post',
    url: '/algo/updateExecuteAlgo',
    data
  });
}

// ==========> 新增通用任务接口 <==========

/*
  moduleType: 课题数
  taskType: 0嵌入 1提取
  description
  status*
  startTime*
  infoData: {
    module 图像 文本 音频
    parameter
    promptFilePath
    keyFilePath
    messageFilePath
    embeddingFilePath
  }
*/
// 新建课题二嵌入任务
export function createCommonTask(data){
  return request({
    url: '/algo/addTopicTwoEmbeddingTask',
    method: 'post',
    data
  })
}

// 执行课题二嵌入任务
// 传id
export function executeCommonTask(data){
  return request({
    url: '/algo/execTopicTwoUploadTask',
    method: 'post',
    data
  })
}
// 新建课题二提取任务
export function createCommonExtractTask(data){
  return request({
    url: '/algo/addTopicTwoExtractingTask',
    method: 'post',
    data
  })
}
// 执行课题二提取任务
export function executeCommonExtractTask(data){
  return request({
    url: '/algo/execTopicTwoExtractingTask',
    method: 'post',
    data
  })
}


// ==========> 课题三接口 <==========
// 课题三嵌入端 - 发布公钥创建任务
/*
{
  name, moduleType, description, taskType
  infoData: {
    userID,
    targetUserId,
    keyType: ECC || RSA
    config: config1 || config2
    publicKeyText 公钥密文 ?
    encryptedSharedKey 私钥密文 ?
    signature 签名密文 ?
  }
}
*/
export function publicImplantPublicKey(data){
  return request({
    url: '/algo/publishTopicThreeEmbeddingPubilcKey',
    method: 'post',
    data
  });
}
// 课题三嵌入端 - 嵌入私钥
/*
  params: { id }
*/
export function publicImplantEmbeddingSharedKey(params){
  return request({
    url: '/algo/publishTopicThreeEmbeddingSharedKey',
    method: 'post',
    params
  })
}
// 课题三嵌入端 - 嵌入签名
// params: { id }
export function publicImplantEmbeddingSign(params){
  return request({
    url: '/algo/publishTopicThreeEmbeddingSign',
    method: 'post',
    params
  })
}
// 课题三提取端 - 提取公钥创建任务
/*
{
  name, moduleType, taskType, description, 
  infoData: {
    userID, targetUserId,
    keyType: ECC || RSA
    config: config1 || config2
    publicKeyText(公钥密文)
    publicKeyTextFilePath(公钥密文文件路径-上传后)
    publicKey(公钥key)
    encryptedSharedKey(私钥密文)
    encryptedSharedKeyFilePath(私钥密文文件路径)
    sharedKey(私钥文件)
    signature(签名密文)
    signatureFilePath(签名密文文件路径)
    verifyResult(认证结果)
  }
}
*/
export function publicExtractPublicKey(data){
  return request({
    url: '/algo/receiveTopicThreeExtractingPubilcKey',
    method: 'post',
    data
  })
}
// 课题三提取端 - 提取私钥
/*
  同上
*/
export function publicExtractShareKey(data){
  return request({
    url: '/algo/receiveTopicThreeExtractingSharedKey',
    method: 'post',
    data
  })
}
// 课题三提取段 - 提取签名
export function publicExtractSign(data){
  return request({
    url: '/algo/receiveTopicThreeExtractingSign',
    method: 'post',
    data
  })
}

// 根据id查课题任务
export function getTaskDetailById(params){
  return request({
    url: '/algo/geTaskById',
    method: 'get',
    params
  })
}

// ==========> 示范应用一接口 <==========

// 嵌入端 - 发布key1
/*
  data: {
    id, name, description, moduleType 51, taskType: 0,
    infoData: {
      userID, targetUserId, keyType, config, 
    } 
  }
*/
export function applicationOneEmbeddingPublicKey(data){
  return request({
    url: '/algo/publishTopicFiveAppOneKeyOne',
    method: 'post',
    data
  })
}
// 嵌入端 - 接收key2
/*
  params: { id }
*/
export function applicationOneEmbeddingSharedKey(data){
  return request({
    url: '/algo/receiveTopicFiveAppOneKeyTwo',
    method: 'post',
    data
  })
}
// 嵌入端 - 嵌入签名及图像
/*
  id, infoData: {
    messageFilePath, keyFilePath, promptFilePath, signatureFilePath
  }
*/
export function applicationOneEmbeddingSign(data){
  return request({
    url: '/algo/publishTopicFiveAppOneEmbeddingSignAndImage',
    method: 'post',
    data
  })
}
// 提取端 - 提取key1
/*
  data: name, description, moduleType 51, taskType 1, 
  infoData: {
    userID, targetUserId, keyType, config, publicKeyTextFilePath
  }
*/
export function applicationOneExtractPublicKey(data){
  return request({
    url: '/algo/receiveTopicFiveAppOneKeyOne',
    method: 'post',
    data
  })
}
// 提取端 - 发布key2
/*
  id, infoData: {
    encryptedSharedKeyFilePath
  }
*/
export function applicationOneExtractSharedKey(params){
  return request({
    url: '/algo/publishTopicFiveAppOneKeyTwo',
    method: 'post',
    params
  })
}
// 提取端 - 提取签名
/*
  id, infoData: {
    messageFilePath, embeddingFilePath, keyFilePath, signatureFilePath
  }
*/
export function applicationOneExtractSign(data){
  return request({
    url: '/algo/receiveTopicFiveAppOneExtractingSignAndImage',
    method: 'post',
    data
  })
}

// ==========> 示范应用二接口 <==========
/*
data: { name, moduleType, taskType, description, 
  infoData: {
    targetUserId, targetUserAvatarFilePath, module, parameter, promptFilePath, messageFilePath
  }
}
return { infoData: embeddingFilePath, avatarStegoText}
*/
export function applicationTwoEmbedding(data){
  return request({
    url: '/algo/publishTopicFiveAppTwoEmbedding',
    method: 'post',
    data
  })
}
export function applicationTwoExtract(data){
  return request({
    url: '/algo/publishTopicFiveAppTwoExtracting',
    method: 'post',
    data
  })
}

// ==========> 示范应用三接口 <==========
// 客户端 - 公钥解密
export function appThreeClientExtractPublishKey(data){
  return request({
    url: '/algo/topicFiveAppThreeClientExtractPublishkey',
    method: 'post',
    data
  })
}
// 客户端 - 生成公钥
export function appThreeClientEmbeddingPublishKey(data){
  return request({
    url: '/algo/topicFiveAppThreeClientEmbeddingPublishkey',
    method: 'post',
    data
  })
}
// 客户端 - 共享密钥提取
export function appThreeClientSharedKey(data){
  return request({
    url: '/algo/topicFiveAppThreeClientSharedKeyExtract',
    method: 'post',
    data
  })
}
// 客户端 - 生成签名
export function appThreeClientSign(data){
  return request({
    url: '/algo/topicFiveAppThreeClientEmbeddingSign',
    method: 'post',
    data
  })
}
// 客户端 - 隐写
export function appThreeClientMessage(data){
  return request({
    url: '/algo/topicFiveAppThreeClientEmbeddingMessageStego',
    method: 'post',
    data
  })
}
// Web端 - 第一步请求公钥
export function appThreeWebRequstKey(data){
  return request({
    url: '/algo/topicFiveAppThreeWebRequestKeyOne',
    method: 'post',
    data
  })
}
// Web端 - 第二步上传密钥
export function appThreeWebUploadKey(data){
  return request({
    url: '/algo/topicFiveAppThreeWebPublishKeyTwo',
    method: 'post',
    data
  })
}
// Web端 - 第三步签名
export function appThreeWebSign(data){
  return request({
    url: '/algo/topicFiveAppThreeWebPublishSignAndStego',
    method: 'post',
    data
  })
}
// 服务端- 签名认证
export function appThreeServerSign(data){
  return request({
    url: '/algo/topicFiveAppThreeServerVerifySign',
    method: 'post',
    data
  })
}
// 服务端- 隐写提取
export function appThreeServerExtract(data){
  return request({
    url: '/algo/topicFiveAppThreeServerStegoExtracting',
    method: 'post',
    data
  })
}

// ==========> 示范应用四接口 <==========
// 服务端 - 签名嵌入
export function appFourServerSign(data){
  return request({
    url: '/algo/topicFiveAppFourServerRsaSignAndMessageEmbeding',
    method: 'post',
    data
  })
}
// 用户端 - 签名认证
export function appFourUserVerify(params){
  return request({
    url: '/algo/topicFiveAppFourWebVerifySign',
    method: 'post',
    params
  })
}
// 用户端 - 签名认证
export function appFourUserExtract(params){
  return request({
    url: '/algo/topicFiveAppFourMmessageTextExtracting',
    method: 'post',
    params
  })
}

// ==========> 分析测评接口 <==========
// 创建分析任务
export function createTask(data){
  return request({
    url: '/algo/createSteganalysisTask',
    method: 'post',
    data
  })
}

// 执行分析任务
export function startTask(data){
  return request({
    url: '/algo/execTopicSteganalysisTask',
    method: 'post',
    data
  })
}